package com.hq.talk.http.request;

import com.hq.talk.http.API;
import com.hq.talk.http.ResponseData;
import com.hq.talk.model.CompanyModel;
import com.hq.talk.model.UserInfoModel;
import com.hq.talk.model.WorkModel;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * API接口
 */
public interface APIService {

    /***************************************用户相关***********************************************/
    /**
     * 注册
     *
     * @param phone        手机号
     * @param code         短信验证码
     * @param password     密码
     * @param nickName     昵称
     * @param registerType 用户注册方式，0-用户名注册，1-邮箱注册，2-手机注册
     * @param registerFrom 注册渠道类型(1、安卓2、苹果3、web )
     */
    @FormUrlEncoded
    @POST(API.REGISTER)
    public Call<ResponseData<UserInfoModel>> register(
            @Field("phone") String phone,
            @Field("code") String code,
            @Field("password") String password,
            @Field("nickName") String nickName,
            @Field("registerType") String registerType,
            @Field("registerFrom") String registerFrom
    );

    /**
     * 短信验证码
     *
     * @param phone 手机号
     * @param type  1.注册2.找回密码3.更换新手机号
     * @author HQ
     * created at 2017/3/3 0003 16:32
     */
    @FormUrlEncoded
    @POST(API.USER_SENDSMS)
    public Call<ResponseData> getSms(
            @Field("phone") String phone,
            @Field("type") int type
    );

    /**
     * 登录
     *
     * @param passport 用户名或者手机号都可以
     * @param password 密码
     * @author HQ
     * created at 2017/3/3 0003 16:32
     */
    @FormUrlEncoded
    @POST(API.USER_LOGIN)
    public Call<ResponseData<UserInfoModel>> login(
            @Field("passport") String passport,
            @Field("password") String password
    );

    /**
     * 重置密码
     *
     * @param phone       手机号
     * @param code        短信验证码
     * @param newPassword 密码
     * @author HQ
     * created at 2017/3/8 0008 14:08
     */
    @FormUrlEncoded
    @POST(API.RESET_PW)
    public Call<ResponseData> resetPw(
            @Field("phone") String phone,
            @Field("code") String code,
            @Field("newPassword") String newPassword
    );

    /**
     * 修改登录密码
     *
     * @param ucId        用户id
     * @param tk          token
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    @FormUrlEncoded
    @POST(API.MODIFY_PW)
    public Call<ResponseData> modifyPw(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("oldPassword") String oldPassword,
            @Field("newPassword") String newPassword
    );

    /**
     * 查询用户详情
     *
     * @param ucId   查看人的用户ucid
     * @param tk     token
     * @param toUcId 被查看人用户ucid，注意：如果查看自己，两个ucid是一样的
     */
    @FormUrlEncoded
    @POST(API.SEARCH_USER_INFO)
    public Call<ResponseData<UserInfoModel>> searchUserInfo(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("toUcId") String toUcId
    );

    /**
     * 修改用户
     *
     * @param ucId     查看人的用户ucid
     * @param tk       token
     * @param nickName 昵称
     * @param email    邮件地址
     * @param realName 真实姓名
     * @param qq       QQ号
     * @param logoUrl  头像地址
     * @param sex      性别1男2女
     * @param country  国家
     * @param province 省
     * @param city     市
     * @param district 街道
     */
    @FormUrlEncoded
    @POST(API.MODIFY_USER_INFO)
    public Call<ResponseData> modifyUserInfo(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("nickName") String nickName,
            @Field("email") String email,
            @Field("realName") String realName,
            @Field("qq") String qq,
            @Field("logoUrl") String logoUrl,
            @Field("sex") String sex,
            @Field("country") String country,
            @Field("province") String province,
            @Field("city") String city,
            @Field("district") String district
    );

    /**
     * 修改手机号
     *
     * @param ucId  查看人的用户ucid
     * @param tk    token
     * @param phone 新手机号
     * @param code  验证码
     */
    @FormUrlEncoded
    @POST(API.MODIFY_PHONE)
    public Call<ResponseData> modifyPhone(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("phone") String phone,
            @Field("code") String code
    );

    /**
     * 修改用户头像
     *
     * @param ucId    查看人的用户ucid
     * @param tk      token
     * @param logoUrl 新手机号
     */
    @FormUrlEncoded
    @POST(API.MODIFY_USER_HEAD)
    public Call<ResponseData> modifyUserHead(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("logoUrl") String logoUrl
    );

    /**
     * 修改昵称
     *
     * @param ucId     查看人的用户ucid
     * @param tk       token
     * @param nickName 用户昵称
     */
    @FormUrlEncoded
    @POST(API.MODIFY_USER_NAME)
    public Call<ResponseData> modifyUserName(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("nickName") String nickName
    );

    /**
     * 查询我的工作技能信息
     *
     * @param ucId 查看人的用户ucid
     * @param tk   token
     */
    @FormUrlEncoded
    @POST(API.SEARCH_MY_WORK)
    public Call<ResponseData<List<WorkModel>>> searchMyWork(
            @Field("ucId") String ucId,
            @Field("tk") String tk
    );

    /***************************************公司相关***********************************************/
    /**
     * 查询公司
     *
     * @param ucId        查看人的用户ucid
     * @param tk          token
     * @param companyName 公司名称
     */
    @FormUrlEncoded
    @POST(API.SEARCH_COMPANY)
    public Call<ResponseData<List<CompanyModel>>> searchCompany(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("companyName") String companyName
    );

    /**
     * 查询所有工作技能信息
     *
     * @param ucId     查看人的用户ucid
     * @param tk       token
     * @param permName 工作名称
     */
    @FormUrlEncoded
    @POST(API.SEARCH_COMPANY)
    public Call<ResponseData> searchAllWork(
            @Field("ucId") String ucId,
            @Field("tk") String tk,
            @Field("permName") String permName
    );
}

